SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
/*
		 ====== MANEJA LA AUDITORIA PARA CUANDO SE ELIMINA UNA TABLA =======
						==== SIN OPTIMIZAR ======
*/

CREATE PROCEDURE [dbo].[spDeleteAudit]
@table varchar(100),
@key varchar(50),
@value varchar(50),
@usuario varchar(50),
@dirIP varchar(15),
@origen varchar(50)
 AS
SET NOCOUNT ON
declare @cod int
declare @evento varchar(1)
declare @hasta datetime
declare @baja varchar(1)
declare @campo varchar(50)
declare @valores varchar(500)
declare @valorCampo varchar(255)
declare @op varchar(10)
declare @idAuditoria int
declare @idRegistroAuditoria int

declare @idusuario int
select @idusuario = (Select idusuario from tb_Usuarios where usuario = @usuario)

--Select @cod = (Select max(idRegistroAuditoria) from tb_RegistroAuditoria)
--select @cod = @cod+1

--declare @idRegistroAuditoria int
--select @idRegistroAuditoria = (Select min(idRegistroAuditoria) from tb_RegistroAuditoria where idRegistroAuditoria in (Select idRegistroAuditoria from tb_Auditoria where TablaOSP = @table and evento=3))

declare @jefe int
select @jefe = (Select idUsuario from tb_Usuarios where upper(esjefe) = 'S' and idReparticion in (Select tb_Usuarios.idReparticion from tb_Usuarios where idUsuario = @usuario))

declare @FechaRegistro varchar(25)
select @FechaRegistro = cast(month(getdate()) as varchar(3))+'/'+cast(day(getdate()) as varchar(3))+'/'+cast(year(getdate()) as varchar(4))

insert into tb_registroEventos(fecha, idUsuario1, severidad, causa, idUsuario2, descripcion)
values (@FechaRegistro, 1, 5, @origen, @jefe, 'Proviene de spGenericDelete '+@table)
					
-- Creamos un cursor por si existen varios campos por guardar
declare cursor_Auditoria cursor for
Select baja, hasta, campo, Evento, idAuditoria from tb_Auditoria where TablaOSP = @table and Evento=3 and baja<>'S'
		
open cursor_Auditoria
fetch next from cursor_Auditoria 
into @baja, @hasta, @campo, @evento, @idAuditoria

select @op = (Select evento from tb_EventosAuditoria where idEvento = @evento)

/*si todavia es valida la auditoria para esta tabla y si la operacion es una baja*/
if (@baja <> 'S') 	and (@op = 'B')
begin
	insert into tb_RegistroAuditoria(fecha, idUsuario, descripcion, dirIP, idAuditoria)
	values (@FechaRegistro, 1, 'Baja sobre tabla '+@table, @dirIP,@idAuditoria)
	Select @idRegistroAuditoria = @@IDENTITY
	-- SI EXISTE MAS DE UN CAMPO PARA GUARDAR SOBRE ESTA TABLA
	while @@fetch_status = 0 begin
			if (@op = 'B') and (@campo <> '')
				begin
					-- Se realiza la conversion de a varchar para todos los campos
					select @valores = 'declare temporal cursor for '
					select @valores = @valores+'Select cast('+@campo+' as varchar(255)) from '+@table+' where '+@key
					exec(@valores)
					open temporal
					fetch next from temporal into @valorCampo
					insert into tb_DetalleAuditoria (idRegistroAuditoria, CampoOParam, valor)
					values (@idRegistroAuditoria, @campo,@valorCampo)
					close temporal
					deallocate temporal
		 		end
				
			fetch next from cursor_Auditoria
			into @baja, @hasta, @campo, @evento, @idAuditoria			
			select @op = (Select evento from tb_EventosAuditoria where idEvento = @evento)

	end --fin del buclue end			
end 
close cursor_Auditoria
deallocate cursor_Auditoria
GO
